Grub Rescue de x86_64 a i386

Hacer cambios de una unidad de almacenamiento ya sea un disco duro, o un disco de estado solido con un sistema operativo instalado puede causar algunos inconvenientes, puesto que los equipos pueden contar con una diferencia de fabricación y en como acceden al sistema operetivo. Teniendo esto presente se tiene un SSD con un sistema linux EFI/UEFI y al migrar a otro equipo que solo conoce BIOS se presenta el inconveniete a continuación:

Al arrancar el sistema aparece el tedioso mensaje Grub Rescue después de transladar un disco de una máquina a otra.

ls
> (hd0), (hd0,msdos3), (hd0,msdos2), (hd0,msdos3)

Al usar ‘ls’ podemos ver unas particiones, significa que se presenta la oportunidad de recuperar nuestro sistema. Podemos hacer ‘ls’ para ver en las diferentes particiones su contenido, debemos hacerlo hasta encontrar nuestra raíz de sistema.

ls (hd0,msdos3)/

Hacer esto permite ver nuestra raíz de archivos linux instalados en el disco, y buscando entre los directorios encontramos

ls (hd0,msdos3)/boot/grub

Algunas publicaciones sugieren hacer

isnmod normal

Pero hacer esto solo reproduce el error:

File '/boot/grub/i386-pc/normal.mod' not found

Pero no hay más información respecto a que hacer en caso del error. Esto se debe a que la configuración de GRUB se vió afectada al mover la unidad del disco a una máquina diferente, y al inspeccionar el sistema de archivos con ls (hd0,msdos3), se pudo ver la carpeta /boot/grub, pero no existía la subcarpeta i386-pc. En su lugar, se encontro x86_64-pc con los módulos .mod correspondientes.

Solución al GRUB Rescue

Dado que el sistema usa GRUB en su versión de 64 bits, la solución consiste en apuntar a la ruta correcta de los módulos.

Configurar la raíz y el prefijo de GRUB

Ejectura los siguientes comandos para asegurar que GRUB esté apuntando al lugar correcto con:

set root=(hd0,msdos3)
set prefix=(hd0,msdos2)/boot/grub/x86_64-pc

Cargar el módulo normal

insmod (hd0,msdos3)/boot/grub/x86_64-pc/normal.mod

Y si el comando se ejecuta sin errores, se debe escribir

normal

Y así se debería llegar al menu GRUB normal.

Arrancar el sistema manualmente

Si el menú de GRUB no aparece, se puede intentar arrancar el kernel manualmente:

linux (hd0,msdos3)/boot/vmlinux-linux root=/dev/sda3 ro
initrd (hd0,msdos3)/boot/initramfs-linux.img
boot

Si el comando linux no es reconocido, significa que GRUB sigue en modo de rescate, por lo que tenemos que reinstalar el GRUB.

Solución desde un Live USB

Si los pasos anteriores no funcionan, la mejor opción es arrancar desde un Live USB de Arch Linux y reinstalar GRUB:

Montar la partición root

sudo mount /dev/sda3 /mnt
# Si hay una partición /boot separada, móntala también:
sudo mount /dev/sda1 /mnt/boot

Preparar el entorno chroot

sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo chroot /mnt

Reinstalar GRUB

grub-install /dev/sda
# Actualizar la configuración de GRUB:
grub-mkconfig -o /boot/grub/grub.cfg

Salir del chroot y reiniciar

exit
sudo umount /mnt/dev /mnt/proc /mnt/sys /mnt
sudo reboot

Conclusión

Este problema ocurrió porque el sistema tenía GRUB de 64 bits, pero GRUB buscaba archivos en la carpeta incorrecta (i386-pc en lugar de x86_64-pc). Ajustando la ruta correctamente en grub rescue, fue posible recuperar el sistema.

Sin embargo, para evitar futuros inconvenientes, se recomienda reinstalar GRUB desde un entorno Live USB.


Esta publicación ha sido creada como soporte en mi formación académica y crecimiento profesional.

© Juan David Garcia Acevedo (aka liandd)